# 导航属性

导航属性是实体类型上的可选属性，它允许从关联的一端导航到另一端。 与其他属性不同，导航属性并不携带数据。

导航属性定义包含以下信息：

名称。 （必需）
导航属性要导航的关联。 （必需）
导航属性要导航的关联端。 （必需）

##  Fluent API

### 配置主键

有关主键的实体框架约定如下：

1. 类定义一个名称为“ID”或“Id”的属性
2. 或后跟“ID”或“Id”的类名

若要将属性显式设置为主键，可以使用 HasKey 方法。 在下面的示例中，HasKey 方法用于对 OfficeAssignment 类型配置 InstructorID 主键。

C#复制

```csharp
modelBuilder.Entity<OfficeAssignment>().HasKey(t => t.InstructorID);
```

### 配置组合主键

下面的示例将 DepartmentID 和 Name 属性配置为 Department 类型的复合主键。

C#复制

```csharp
modelBuilder.Entity<Department>().HasKey(t => new { t.DepartmentID, t.Name });
```

### 关闭数字主键的标识

下面的示例将 DepartmentID 属性设置为 System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None，以指示该值不会由数据库生成。

C#复制

```csharp
modelBuilder.Entity<Department>().Property(t => t.DepartmentID)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
```

### 指定属性的最大长度

在下面的示例中，Name 属性的长度不应超过 50 个字符。 如果该值的长度超过 50 个字符，你会收到 [DbEntityValidationException](https://msdn.microsoft.com/library/system.data.entity.validation.dbentityvalidationexception.aspx) 异常。 如果 Code First 通过此模型创建数据库，则还会将 Name 列的最大长度设置为 50 个字符。

C#复制

```csharp
modelBuilder.Entity<Department>().Property(t => t.Name).HasMaxLength(50);
```